/* 2º Trabalho de Linguagens de Programação
  Criado por: Rafael Couvinha nº 5631
  Contacto: Rafael_couvinha@live.com.pt */

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <Python.h>



int contagem;

/* Este método permitir-nos-à escrever o resultado da query
   efectuada na função count_per_year_estab no ficheiro Contagem_ano_estab.txt,
   Recebe um valor ano do tipo char, que será o valor a ser colocado no ficheiro .txt.
   Recebe um valor estab do tipo char, que será o valor a ser colacado no ficheiro .txt.*/
int writefile4(char ano[5], char estab[40]){

	FILE *f1;
	
	f1 = fopen("Contagem_ano_estab.txt", "w");

	fprintf(f1, "O numero total de docentes no ano %s e no estabelecimento %s é %d\n",ano , estab, contagem);
	
	fclose(f1);

	return ;

}

/* Este método permitir-nos-à tratar os dados resultantes da query
   efectuada na função count_per_year_estab, este método irá passar o valor da query 
   no argv[0] para inteiro e guarda-o na variavel contagem.
   Recebe uma variavel NotUsed do tipo void*, que não será utilizado.
   Recebe uma variavel argc do tipo inteiro, que é o tamanho do array argv
   Recbe uma variavel argv do tipo char**, que é onde será guardado os dados 
   resultantes da query realziada
   Recebe uma variavel azColName do tipo char**, que é o nome das colunas existentes
   na tabela*/
static int callback(void* NotUsed, int argc, char **argv, char **azColName){

	contagem = atoi( argv[0] ? argv[0] : "NULL");
	
	return 0;
}

/* Este método permitir-nos-à estabelecer a ligação à base de dados rebides
   para que possamos efectuar a query da contagem dos docentes por ano e por estabelecimento
   esta ligação e a query é nos possivel utilizando a variavel *db do tipo sqlite3
   Recebe uma variavel ano do tipo int, que é utlizada para realizar a query pretendida.
   Recebe uma variavel estab do tipo char, que é utilizada para realizar a query pretendida
   Devolve um PyObject* para que este seja reconhecido pelo compilador de Python*/
PyObject* count_per_year_estab(int ano, char estab[40]){
	char* name_db= "rebides.db";
	sqlite3 *db;  
	char *zErrMsg = 0;
	int rc;
	char* query;
	char* cond;
	char* sAno;

	query = (char *) malloc(sizeof (char[200]));
	cond = (char *) malloc(sizeof (char[60]));
	sAno = (char *) malloc(sizeof (char));

	strcpy(query, "SELECT COUNT(DISTINCT docente) FROM fichas_docencia where ano = ");
	strcpy(cond, " AND estabelecimento = ");
	sprintf(sAno, "%d", ano);
	strcat(query, sAno);
	strcat(cond, estab);
	strcat(query, cond);

	printf("Ano : %s \n", sAno);
	printf("Estabelecimento : %s \n", estab);
	printf("Query : %s \n", query);

	rc = sqlite3_open(name_db, &db);

	rc = sqlite3_exec(db, query, callback, 0, &zErrMsg);
	if( rc!=SQLITE_OK ){
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	
	sqlite3_close(db);

	writefile4 (sAno, estab);
	
	free(query);
	free(cond);
	free(sAno);

	return PyInt_FromLong(contagem);
}